package com.xiaobias.day003.rabbitMQ;

/**
 * @author <a href="mailto:197772517@qq.com">longw.dr</a>
 * @date 2023-11-09 11-15
 * @since 1.0
 */
public class MqClient {
    // AMQP
    // 另一个和消息中间件有关的协议就是 AMQP 了。
    // Advanced Message Queuing Protocol （AMQP）开放标准
    // 2007 年，Rabbit 技术公司基于 AMQP 标准开发的 RabbitMQ 1.0 发布。
    // 在 AMQP 协议中，消息收发涉及到如下一些概念：
    // Broker: 接收和分发消息的应用，我们日常所用的 RabbitMQ 就是一个 Message Broker。
    // Virtual host: 出于多租户和安全因素设计的，把 AMQP 的基本组件划分到一个虚拟的分组中，类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ 提供的服务时，可以划分出多个 vhost，每个用户在自己的 vhost 中创建 exchange／queue 等
    // Connection: publisher／consumer 和 broker 之间的 TCP 连接，断开连接的操作只会在 client 端进行，Broker 不会断开连接，除非出现网络故障或 broker 服务出现问题。
    // Channel: 如果每一次访问 RabbitMQ 都建立一个 Connection，在消息量大的时候建立 TCP Connection 的开销将是巨大的，效率也较低。Channel 是在 Connection 内部建立的逻辑连接，如果应用程序支持多线程，通常每个 Thread 创建单独的 Channel 进行通讯，AMQP method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel，所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销
    // Exchange: Message 到达 Broker 的第一站，根据分发规则，匹配查询表中的 routing key，分发消息到 queue 中去。常用的类型有：direct (点对点), topic(发布订阅) 以及 fanout (广播)。
    // Queue: 消息最终被送到这里等待 Consumer 取走，一个 Message 可以被同时拷贝到多个 queue 中。
    // Binding: Exchange 和 Queue 之间的虚拟连接，binding 中可以包含 routing key，Binding 信息被保存到 Exchange 中的查询表中，作为 Message 的分发依据。

    //  Web 管理页面大概一共有六个选项卡
    // Overview：这里可以概览 RabbitMQ 的整体情况，如果是集群，也可以查看集群中各个节点的情况。包括 RabbitMQ 的端口映射信息等，都可以在这个选项卡中查看。
    // Connections：这个选项卡中是连接上 RabbitMQ 的生产者和消费者的情况。
    // Channels：这里展示的是“通道”信息，关于“通道”和“连接”的关系。
    // Exchange：这里展示所有的交换机信息。
    // Queue：这里展示所有的队列信息。
    // Admin：这里展示所有的用户信息。

    // Overview
    // Totals 里面有 准备消费的消息数、待确认的消息数、消息总数以及消息的各种处理速率（发送速率、确认速率、写入硬盘速率等等）。


}
